class Solution {
    public int maxTurbulenceSize(int[] arr) {
        int n = arr.length;

        int[] f = new int[n]; // 以 i 位置为结尾，最后呈上升趋势的最大湍流子数组的长度
        int[] g = new int[n]; // 以 i 位置为结尾，最后呈下降趋势的最大湍流子数组的长度
        // 初始化
        for(int i = 0; i < n; i++){
            f[i] = 1;
            g[i] = 1;
        }
        // 状态转移
        int ret = 1;
        for(int i = 1; i < n; i++){
            if(arr[i] > arr[i - 1]) f[i] = g[i - 1] + 1;
            else if(arr[i] < arr[i - 1]) g[i] = f[i - 1] + 1;
            ret = Math.max(ret, Math.max(f[i], g[i]));
        }
        return ret;
    }
}